package 简单;

/*
买卖股票的最佳时机
力扣地址：https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易（即买入和卖出一支股票一次），设计一个算法来计算你所能获取的最大利润。
注意：你不能在买入股票前卖出股票。

示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出股票。
 * */

import java.util.Arrays;

public class demo121  {

    public static void main(String[] args) {

//        int[] a ={7,1,5,3,6,4};
//        int[] a ={3,2,6,5,0,3};
        int[] a ={2,1,2,0,1};

        System.out.println(maxProfit(a));

    }

    //获得最大利润
    public static int maxProfit(int[] prices) {

        if(prices == null || prices.length == 0)
            return 0;

        //DP数组
        int n = prices.length;
        int[] dp = new int[n];
        //结束条件
        if(n == 1)
            return 0;

        //关系式
        int min = Integer.MAX_VALUE;
        for(int i=1;i<n;i++) {

            if(prices[i]>prices[i-1])
            {
                min = min < prices[i-1]?min: prices[i-1];
                dp[i] = dp[i-1]<prices[i]-min?prices[i]-min:dp[i-1];

            }
            else
            {
                dp[i] = dp[i-1];
            }

        }

//        System.out.println(Arrays.toString(dp));

        return dp[n-1];

    }
}